A valuable mechanism in dealing with regular expressions involves the use of subexpressions, frequently called ‘backreferences’. Traditionally, this was associated with the use of NFAs, which are far slower at execution than DFAs. However subexpressions allow flexibility for the user, not available in a DFA without subexpressions. For example, suppose the digits of an identification code are to be extracted from an HTTP session and that their location is denoted by prefixing with the string ‘ID=’ and followed by the string ‘EndOfSecretID’. Then using conventional regular expression notation: ‘ID=<\d+>EndOfSecretID’ will match the appropriate portion of a string and return to the user a substring corresponding to the characters of the input that match that part of the regular expression that occurs between the angle brackets. Standard techniques for processing regular expressions containing subexpressions involve ‘backtracking’ or multiple passes through the data. Note that the notation used in this document differs somewhat from conventional regular expression notations where parenthesis are used to indicate subexpressions. Here, angle brackets <>denote the boundaries of a subexpression, and parenthesis are used for expression grouping.